/**
 * axios 封装
 * 请求拦截、响应拦截、错误统一处理
 */
import axios from "axios"
// import { errorCodeType } from "./error-code-type";
import { ElLoading, ElMessage } from 'element-plus';  
import config from './config'
import { da, el } from "element-plus/es/locale";




/****
 * @param data  请求数据配置
 * @param data.url    string   请求地址 
 * @param data.method     sreing 请求方式
 * @param data.tokenCode    boolean 是否需要token
 * @param data.loadingShow  boolean  是否显示加载动画
 * @param data.loadinfText     String  是否显示加载成功的提示
 * @returns Promise
 */

const service = axios.create()
const loading = ElLoading


class axiosHttp {
  request(data: any) {
    const CancelToken = axios.CancelToken;
    const source = CancelToken.source(); 
    const token= localStorage.getItem('token')|| ""

    
    service.interceptors.request.use(config => {
      if (data.tokenCode && token=='' ) {
        source.cancel('请传入token')
      }else if(data.tokenCode){
        config.headers.Authorization=token
      }
      console.log(config,"===请求体===")
      return config;
    }, error => {
      return Promise.reject(error)
    });

    // 响应拦截（只注册一次）
    service.interceptors.response.use(response => {
      return response;
    }, error => {
      console.log(error)
      ElMessage.error(error.response.data.msg)
      // if (error.response) {
      //   ElMessage.error(errorCodeType(error.response.status))
      // } else {
        
      // }
      return Promise.reject(error);
    });

    // 是否需要加载动画
    if (data.loadingShow == true) {
      loading.service({
        lock: true,
        text: 'Loading',
        background: 'rgba(0, 0, 0, 0.7)',
      });

      setTimeout(() => {
        loading.service().close();
      }, 3000);
    }

    return new Promise((resolve, reject) => {
      service({
        method: data.method || "GET",
        baseURL: config.baseURL,
        url: data.url,
        params: data.params || {},       // GET 参数
        data: data.data || {},           // POST 请求体（关键修复点）
        headers: config.headers,
        cancelToken: source.token
      }).then(rsp => {
        loading.service().close();
        if (rsp.status === 200) {
          resolve(rsp.data);
          if (data.loadinfText != undefined) {
            ElMessage.success(data.loadinfText);
          }else{
            ElMessage.success(rsp.data.msg);
          } 
        } else {
          ElMessage.error(rsp.data.msg)
          reject(rsp);
        }
      }).catch(err => {
        loading.service().close();
        reject(err);
      });
    });
  }
}

export default new axiosHttp();